var path = require('path');
var express = require('express');
var routes = require('./routes');
var pkg = require('../package');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var dbConfig = require('./config/default');
var cookieParser = require('cookie-parser'); 

var app = express();
  
//设置静态文件目录
app.use(express.static(path.join(__dirname, '../client/dist')));
app.use(express.static(path.join(__dirname, './public')));

//Dev开启热更新
//--------------hot------------------------
if(process.env.NODE_ENV === 'development'){
    var webpack = require('webpack');    
    var webpackDevMiddleware = require("webpack-dev-middleware");
    var config = require('../webpack.config.dev');
    var compiler = webpack(config);


    app.use(webpackDevMiddleware(compiler, {
    
        noInfo: false, //true将打印编译信息（建议false，true会打印很多信息）
        publicPath: config.output.publicPath //绑定middleware
    }));
    //-------------------------------------- 
} 

 //设置cookie中间件
app.use(cookieParser(dbConfig.session.secret));
//session 中间件
//session是另一种记录客户状态的机制，不同的是Cookie保存在客户端浏览器中，而session保存在服务器上。
app.use(session({
    name: dbConfig.session.key,//设置cookie中保存session id 的字段名称
    secret: dbConfig.session.secret, //通过设置secret来计算hash值并放在cookie中，使产生的 signedCookie 防篡改 与cookieParser中的一致
    cookie: {
        maxAge: dbConfig.session.maxAge// 过期时间，过期后自动删除 session id
    },
    store: new MongoStore({
        url: dbConfig.mongodb // mongodb地址
    }),
    resave: false,  // 是否每次都重新保存会话，建议false
}));

//配置解释普通表单post请求体
app.use(require('body-parser')({extended: false}));

//添加模板必须的变量
app.use(function(req, res, next){
    res.locals.user = req.session.user;
    next();
})

//路由
routes(app);


app.get('*', function(req, res) {
    res.sendFile(path.resolve(__dirname, '../index.html'));    
});
 
app.listen(3100, function(err) {
 
  if (err) {
    console.log(err);
    return;
  }
  console.log('Listening at http://localhost:3100');
});